/**
 * @description account 服务层
 * @author LI
 */

const { DecoratItem, DecoratItemInfo } = require('../db/model/index')
const Op = require('sequelize').Op
const { formatMoreTime } = require('../utils/dateTime')

/**
 * 创建商品图片信息
 * @param {string} itemSn 项目编号
 * @param {string} itemName 项目名称
 * @param {number} itemPrice 人工辅料/单价
 * @param {string} itemUnit 项目单位
 * @param {string} itemRemark 项目备注
 */
async function createDecoratitem({  itemSn, itemName, itemPrice, itemUnit, itemRemark }) {
  const result = await DecoratItem.create({
    itemSn,
    itemName,
    itemPrice,
    itemUnit,
    itemRemark,
  })

  return result
}

/**
 * 获取全部商品图片信息
 * @param {string} goodsInfoId 商品信息 id
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDecoratitemsList({ itemName = '', page = 1, limit = 10 }) {

  const result = await DecoratItem.findAndCountAll({
    limit: limit, // 每页多少条
    offset: limit * (page - 1), // 跳过多少条
    where: {
      itemName: {
        [Op.like]: '%' + itemName + '%'
      },
    }
  })

  result.rows.map(item => {
    // 格式化时间 多个
    item.dataValues = formatMoreTime(item.dataValues)
  })

  return result
}

/**
 * 通过 id 更新商品项目信息
 * @param {number} id id
 * @param {string} itemSn 项目编号
 * @param {string} itemName 项目名称
 * @param {number} itemPrice 人工辅料/单价
 * @param {string} itemUnit 项目单位
 * @param {string} itemRemark 项目备注
 */
async function updateDecoratitemById({ id, itemSn, itemName, itemPrice, itemUnit, itemRemark }) {
  // 拼接修改内容
  const updateData = {}
  if (itemSn) {
    updateData.itemSn = itemSn
  }
  if (itemName) {
    updateData.itemName = itemName
  }
  if (itemPrice) {
    updateData.itemPrice = itemPrice
  }
  if (itemUnit) {
    updateData.itemUnit = itemUnit
  }
  updateData.itemRemark = itemRemark
  const result = await DecoratItem.update(updateData, {
    where: { id }
  })

  return result[0] > 0
}

/**
 * 通过 id 删除项目信息
 * @param {number} id id
 */
async function deleteDecoratitemById(id) {
  const result = await DecoratItem.findAll({
    where: { id },
    include: [
      { model: DecoratItemInfo }
    ],
  })

  for (const resul of result) {
    for (const child of resul.decoratItemInfos) {
      child.destroy()
    }
    resul.destroy()
  }

  return result > 0
}

module.exports = {
  createDecoratitem,
  getDecoratitemsList,
  updateDecoratitemById,
  deleteDecoratitemById
}
